#ifndef CONFIGPANEL_H
#define CONFIGPANEL_H

#include <wx/button.h>
#include <wx/checkbox.h>
#include <wx/choice.h>
#include <wx/notebook.h>
#include <wx/panel.h>
#include <wx/radiobox.h>
#include <wx/sizer.h>
#include <wx/stattext.h>
#include <wx/textctrl.h>
#include <M_Code_StyledTextCtrl.h>
#include <configurationpanel.h>
#include "DoxyBlocks.h"

class ConfigPanel: public cbConfigurationPanel {
  public:
    ConfigPanel( wxWindow* parent, DoxyBlocks *pOwner, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize );
    virtual ~ConfigPanel();
    void Init();
    wxInt8 GetBlockComment() { return RadioBoxBlockComments->GetSelection(); }
    void SetBlockComment( wxInt8 val ) { RadioBoxBlockComments->SetSelection( val ); }
    wxInt8 GetLineComment() { return RadioBoxLineComments->GetSelection(); }
    void SetLineComment( wxInt8 val ) { RadioBoxLineComments->SetSelection( val ); }
    wxString GetProjectNumber() { return TextCtrlProjectNumber->GetValue(); }
    void SetProjectNumber( wxString val ) { TextCtrlProjectNumber->SetValue( val ); }
    wxString GetOutputDirectory() { return TextCtrlOutputDirectory->GetValue(); }
    void SetOutputDirectory( wxString val ) { TextCtrlOutputDirectory->SetValue( val ); }
    wxString GetOutputLanguage() { return ChoiceOutputLanguage->GetStringSelection(); }
    void SetOutputLanguage( wxString val ) { ChoiceOutputLanguage->SetStringSelection( val ); }
    bool GetUseAutoVersion() { return CheckBoxUseAutoVersion->GetValue(); }
    void SetUseAutoVersion( bool val ) { m_bUseAutoVersion = val; }
    bool GetExtractAll() { return CheckBoxExtractAll->GetValue(); }
    void SetExtractAll( bool val ) { CheckBoxExtractAll->SetValue( val ); }
    bool GetExtractPrivate() { return CheckBoxExtractPrivate->GetValue(); }
    void SetExtractPrivate( bool val ) { CheckBoxExtractPrivate->SetValue( val ); }
    bool GetExtractStatic() { return CheckBoxExtractStatic->GetValue(); }
    void SetExtractStatic( bool val ) { CheckBoxExtractStatic->SetValue( val ); }
    bool GetWarnings() { return CheckBoxWarnings->GetValue(); }
    void SetWarnings( bool val ) { CheckBoxWarnings->SetValue( val ); }
    bool GetWarnIfDocError() { return CheckBoxWarnIfDocError->GetValue(); }
    void SetWarnIfDocError( bool val ) { CheckBoxWarnIfDocError->SetValue( val ); }
    bool GetWarnIfUndocumented() { return CheckBoxWarnIfUndocumented->GetValue(); }
    void SetWarnIfUndocumented( bool val ) { CheckBoxWarnIfUndocumented->SetValue( val ); }
    bool GetWarnNoParamdoc() { return CheckBoxWarnNoParamdoc->GetValue(); }
    void SetWarnNoParamdoc( bool val ) { CheckBoxWarnNoParamdoc->SetValue( val ); }
    bool GetAlphabeticalIndex() { return CheckBoxAlphabeticalIndex->GetValue(); }
    void SetAlphabeticalIndex( bool val ) { CheckBoxAlphabeticalIndex->SetValue( val ); }
    bool GetGenerateHTML() { return CheckBoxGenerateHTML->GetValue(); }
    void SetGenerateHTML( bool val ) { CheckBoxGenerateHTML->SetValue( val ); }
    bool GetGenerateHTMLHelp() { return CheckBoxGenerateHTMLHelp->GetValue(); }
    void SetGenerateHTMLHelp( bool val ) { CheckBoxGenerateHTMLHelp->SetValue( val ); }
    bool GetGenerateCHI() { return CheckBoxGenerateCHI->GetValue(); }
    void SetGenerateCHI( bool val ) { CheckBoxGenerateCHI->SetValue( val ); }
    bool GetBinaryTOC() { return CheckBoxBinaryTOC->GetValue(); }
    void SetBinaryTOC( bool val ) { CheckBoxBinaryTOC->SetValue( val ); }
    bool GetGenerateLatex() { return CheckBoxGenerateLatex->GetValue(); }
    void SetGenerateLatex( bool val ) { CheckBoxGenerateLatex->SetValue( val ); }
    bool GetGenerateRTF() { return CheckBoxGenerateRTF->GetValue(); }
    void SetGenerateRTF( bool val ) { CheckBoxGenerateRTF->SetValue( val ); }
    bool GetGenerateMan() { return CheckBoxGenerateMan->GetValue(); }
    void SetGenerateMan( bool val ) { CheckBoxGenerateMan->SetValue( val ); }
    bool GetGenerateXML() { return CheckBoxGenerateXML->GetValue(); }
    void SetGenerateXML( bool val ) { CheckBoxGenerateXML->SetValue( val ); }
    bool GetGenerateAutogenDef() { return CheckBoxGenerateAutogenDef->GetValue(); }
    void SetGenerateAutogenDef( bool val ) { CheckBoxGenerateAutogenDef->SetValue( val ); }
    bool GetGeneratePerlMod() { return CheckBoxGeneratePerlMod->GetValue(); }
    void SetGeneratePerlMod( bool val ) { CheckBoxGeneratePerlMod->SetValue( val ); }
    bool GetEnablePreprocessing() { return CheckBoxEnablePreprocessing->GetValue(); }
    void SetEnablePreprocessing( bool val ) { CheckBoxEnablePreprocessing->SetValue( val ); }
    bool GetHaveDot() { return CheckBoxHaveDot->GetValue(); }
    void SetHaveDot( bool val ) { CheckBoxHaveDot->SetValue( val ); }
    bool GetClassDiagrams() { return CheckBoxClassDiagrams->GetValue(); }
    void SetClassDiagrams( bool val ) { CheckBoxClassDiagrams->SetValue( val ); }
    wxString GetPathDoxygen() { return TextCtrlPathDoxygen->GetValue(); }
    void SetPathDoxygen( wxString val ) { TextCtrlPathDoxygen->SetValue( val ); }
    wxString GetPathDoxywizard() { return TextCtrlPathDoxywizard->GetValue(); }
    void SetPathDoxywizard( wxString val ) { TextCtrlPathDoxywizard->SetValue( val ); }
    wxString GetPathHHC() { return TextCtrlPathHHC->GetValue(); }
    void SetPathHHC( wxString val ) { TextCtrlPathHHC->SetValue( val ); }
    wxString GetPathDot() { return TextCtrlPathDot->GetValue(); }
    void SetPathDot( wxString val ) { TextCtrlPathDot->SetValue( val ); }
    wxString GetPathCHMViewer() { return TextCtrlPathCHMViewer->GetValue(); }
    void SetPathCHMViewer( wxString val ) { TextCtrlPathCHMViewer->SetValue( val ); }
    bool GetOverwriteDoxyfile() { return CheckBoxOverwriteDoxyfile->GetValue(); }
    void SetOverwriteDoxyfile( bool val ) { CheckBoxOverwriteDoxyfile->SetValue( val ); }
    bool GetPromptBeforeOverwriting() { return CheckBoxPromptBeforeOverwriting->GetValue(); }
    void SetPromptBeforeOverwriting( bool val ) { CheckBoxPromptBeforeOverwriting->SetValue( val ); }
    bool GetUseAtInTags() { return CheckBoxUseAtInTags->GetValue(); }
    void SetUseAtInTags( bool val ) { CheckBoxUseAtInTags->SetValue( val ); }
    bool GetLoadTemplate() { return CheckBoxLoadTemplate->GetValue(); }
    void SetLoadTemplate( bool val ) { CheckBoxLoadTemplate->SetValue( val ); }
    bool GetUseInternalViewer() { return CheckBoxUseInternalViewer->GetValue(); }
    void SetUseInternalViewer( bool val ) { CheckBoxUseInternalViewer->SetValue( val ); }
    bool GetRunHTML() { return CheckBoxRunHTML->GetValue(); }
    void SetRunHTML( bool val ) { CheckBoxRunHTML->SetValue( val ); }
    bool GetRunCHM() { return CheckBoxRunCHM->GetValue(); }
    void SetRunCHM( bool val ) { CheckBoxRunCHM->SetValue( val ); }
    void SetAutoVersioning( bool val ) { m_bAutoVersioning = val; }
    M_Code_StyledTextCtrl* TextCtrlBlockComment;
    M_Code_StyledTextCtrl* TextCtrlLineComment;
    wxButton* ButtonBrowseCHMViewer;
    wxButton* ButtonBrowseDot;
    wxButton* ButtonBrowseDoxygen;
    wxButton* ButtonBrowseDoxywizard;
    wxButton* ButtonBrowseHHC;
    wxCheckBox* CheckBoxAlphabeticalIndex;
    wxCheckBox* CheckBoxBinaryTOC;
    wxCheckBox* CheckBoxClassDiagrams;
    wxCheckBox* CheckBoxEnablePreprocessing;
    wxCheckBox* CheckBoxExtractAll;
    wxCheckBox* CheckBoxExtractPrivate;
    wxCheckBox* CheckBoxExtractStatic;
    wxCheckBox* CheckBoxGenerateAutogenDef;
    wxCheckBox* CheckBoxGenerateCHI;
    wxCheckBox* CheckBoxGenerateHTML;
    wxCheckBox* CheckBoxGenerateHTMLHelp;
    wxCheckBox* CheckBoxGenerateLatex;
    wxCheckBox* CheckBoxGenerateMan;
    wxCheckBox* CheckBoxGeneratePerlMod;
    wxCheckBox* CheckBoxGenerateRTF;
    wxCheckBox* CheckBoxGenerateXML;
    wxCheckBox* CheckBoxHaveDot;
    wxCheckBox* CheckBoxLoadTemplate;
    wxCheckBox* CheckBoxOverwriteDoxyfile;
    wxCheckBox* CheckBoxPromptBeforeOverwriting;
    wxCheckBox* CheckBoxRunCHM;
    wxCheckBox* CheckBoxRunHTML;
    wxCheckBox* CheckBoxUseAtInTags;
    wxCheckBox* CheckBoxUseAutoVersion;
    wxCheckBox* CheckBoxUseInternalViewer;
    wxCheckBox* CheckBoxWarnIfDocError;
    wxCheckBox* CheckBoxWarnIfUndocumented;
    wxCheckBox* CheckBoxWarnNoParamdoc;
    wxCheckBox* CheckBoxWarnings;
    wxChoice* ChoiceOutputLanguage;
    wxRadioBox* RadioBoxBlockComments;
    wxRadioBox* RadioBoxLineComments;
    wxTextCtrl* TextCtrlOutputDirectory;
    wxTextCtrl* TextCtrlPathCHMViewer;
    wxTextCtrl* TextCtrlPathDot;
    wxTextCtrl* TextCtrlPathDoxygen;
    wxTextCtrl* TextCtrlPathDoxywizard;
    wxTextCtrl* TextCtrlPathHHC;
    wxTextCtrl* TextCtrlProjectNumber;
  protected:
    static const long ID_RADIOBOX_BLOCKCOMMENTS;
    static const long ID_TEXTCTRL_BLOCKCOMMENT;
    static const long ID_RADIOBOX_LINECOMMENTS;
    static const long ID_TEXTCTRL_LINECOMMENT;
    static const long ID_PANEL2;
    static const long ID_TEXTCTRL_PROJECTNUMBER;
    static const long ID_CHECKBOX_USEAUTOVERSION;
    static const long ID_TEXTCTRLOUTPUT_DIRECTORY;
    static const long ID_STATICTEXT5;
    static const long ID_CHOICE_OUTPUT_LANGUAGE;
    static const long ID_CHECKBOX_EXTRACT_ALL;
    static const long ID_CHECKBOX_EXTRACTPRIVATE;
    static const long ID_CHECKBOX_EXTRACTSTATIC;
    static const long ID_CHECKBOX_WARNINGS;
    static const long ID_CHECKBOX_WARN_IF_DOC_ERROR;
    static const long ID_CHECKBOX_WARN_IF_UNDOCUMENTED;
    static const long ID_CHECKBOX_WARN_NO_PARAMDOC;
    static const long ID_CHECKBOX_ALPHABETICAL_INDEX;
    static const long ID_PANEL3;
    static const long ID_CHECKBOX_GENERATE_HTML;
    static const long ID_CHECKBOX_GENERATE_HTMLHELP;
    static const long ID_CHECKBOX_GENERATE_CHI;
    static const long ID_CHECKBOX_BINARY_TOC;
    static const long ID_CHECKBOX_GENERATE_LATEX;
    static const long ID_CHECKBOX_GENERATE_RTF;
    static const long ID_CHECKBOX_GENERATE_MAN;
    static const long ID_CHECKBOX_GENERATE_XML;
    static const long ID_CHECKBOX_GENERATE_AUTOGEN_DEF;
    static const long ID_CHECKBOX_GENERATE_PERLMOD;
    static const long ID_CHECKBOX_ENABLE_PREPROCESSING;
    static const long ID_CHECKBOX_CLASS_DIAGRAMS;
    static const long ID_CHECKBOX_HAVE_DOT;
    static const long ID_PANEL4;
    static const long ID_STATICTEXT2;
    static const long ID_TEXTCTRL_PATHDOXYGEN;
    static const long ID_BUTTON_BROWSEDOXYGEN;
    static const long ID_STATICTEXT4;
    static const long ID_TEXTCTRL_PATHDOXYWIZARD;
    static const long ID_BUTTON_BROWSEDOXYWIZARD;
    static const long ID_STATICTEXT3;
    static const long ID_TEXTCTRL_PATHHHC;
    static const long ID_BUTTON_BROWSEHHC;
    static const long ID_STATICTEXT6;
    static const long ID_TEXTCTRL_PATHDOT;
    static const long ID_BUTTON_BROWSEDOT;
    static const long ID_STATICTEXT7;
    static const long ID_TEXTCTRL_PATHCHMVIEWER;
    static const long ID_BUTTON_BROWSECHMVIEWER;
    static const long ID_CHECKBOX_OVERWRITEDOXYFILE;
    static const long ID_CHECKBOX_PROMPTB4OVERWRITING;
    static const long ID_CHECKBOX_USEATINTAGS;
    static const long ID_CHECKBOX_LOADTEMPLATE;
    static const long ID_CHECKBOX_USEINTERNALVIEWER;
    static const long ID_CHECKBOX_RUNHTML;
    static const long ID_CHECKBOX_RUNCHM;
    static const long ID_PANEL1;
    static const long ID_NOTEBOOK_PREFS;
  private:
    void OnRadioBoxBlockCommentsSelect( wxCommandEvent& event );
    void OnRadioBoxLineCommentsSelect( wxCommandEvent& event );
    void OnButtonBrowseDoxygenClick( wxCommandEvent& event );
    void OnButtonBrowseDoxywizardClick( wxCommandEvent& event );
    void OnButtonBrowseHHCClick( wxCommandEvent& event );
    void OnButtonBrowseDotClick( wxCommandEvent& event );
    void OnCheckBoxGenerateHTMLClick( wxCommandEvent& event );
    void OnCheckBoxOverwriteDoxyfileClick( wxCommandEvent& event );
    void OnCheckBoxWarningsClick( wxCommandEvent& event );
    void OnCheckBoxUseAutoversionClick( wxCommandEvent& event );
    void OnCheckBoxUseAtInTagsClick( wxCommandEvent& event );
    void OnButtonBrowseCHMViewerClick( wxCommandEvent& event );
    wxString GetTitle() const { return _( "DoxyBlocks" ); }
    wxString GetBitmapBaseName() const;
    void OnApply();
    void OnCancel() {}
    wxString GetApplicationPath();
    void InitSTC( cbStyledTextCtrl * stc );
    void WriteBlockComment( cbStyledTextCtrl *stc, int iBlockComment, bool bUseAtInTags );
    void WriteLineComment( cbStyledTextCtrl *stc, int iLineComment );
    DoxyBlocks* m_pOwnerClass;
    bool m_bAutoVersioning;
    bool m_bUseAutoVersion;
    DECLARE_EVENT_TABLE()
};

#endif
